/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beanSession;

import Controlador.Conexion;
import Modelos.*;
import beanView.beanDatos;
import java.io.Serializable;
import java.sql.ResultSet;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author brayitan
 */
@ManagedBean
@SessionScoped

public class beanGuardar implements Serializable{
String ip = "127.0.0.1";
String port = "1521";
private String GuardarDatos(beanDatos bean){
    String Mensaje = "No se ha podido guardar los datos";
    String MensajeAux="";
    java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("dd/MM/yyyy");
    boolean Comitar = true;
    Conexion sql = new Conexion(ip, port);
            int Resultado = sql.getUpdate("INSERT INTO BDADDocentes (Nombre1, Nombre2, Apellido1, Apellido2, Cedula, PaisCedula, DepartamentoCedula, CiudadCedula, Sexo, FechaNacimiento, PaisNacimiento, DepartamentoNacimiento, CiudadNacimiento, PaisResidencia, DepartamentoResidencia, CiudadResidencia, Residencia, Telefono, Celular, Email) VALUES ('" + bean.getNombre1() + "', '" + bean.getNombre2() + "', '" + bean.getApellido1() + "','" + bean.getApellido2() + "','" + bean.getCedula() + "','" + bean.getPaisCed() + "','" + bean.getDepartamentoCed() + "','" + bean.getCiudadCed() + "','" + bean.getSexo() + "', TO_DATE('" + sdf.format(bean.getFechaNacimiento()) + "','DD/MM/YYYY'),'" + bean.getPaisNac() + "','" + bean.getDepartamentoNac() + "','" + bean.getCiudadNac() + "','" + bean.getPaisRes() + "','" + bean.getDepartamentoRes() + "','" + bean.getCiudadRes() + "','" + bean.getDireccion() + "','" + bean.getTelefono() + "','" + bean.getCelular() + "','" +bean.getEmail() + "')");            
            try {
                if (Resultado == 0) {
                    Mensaje ="Error al ingresar el docente, revisar la base de datos";
                    Comitar = false;
                } else if (Resultado == -1) {                   
                    Mensaje = "Error al ingresar el docente, Ya existe";
                    Comitar = false;
                } else {                    
                    ResultSet RS = sql.getQuery("select BDADBuscarDocentePorCedula('" + bean.getCedula() + "') from dual");
                    RS.next();                    
                    long idDocente = RS.getLong(1);                         
                    if (Comitar) {
                        for (int i = 0; i < bean.getFAS().size(); i++) {
                            FormacionAcademica FA = (FormacionAcademica) (bean.getFAS().get(i));
                            Resultado = sql.getUpdate("INSERT INTO BDADFormacionAcademica (Docente, TipoTitulo, NombreTitulo, Acta, UniversidadGrado, FechaGrado, TarjetaProfesional, LugarExpedicion) VALUES (" + idDocente + ",'" + FA.getTipoTitulo() + "', '" + FA.getNombreTitulo() + "', '" + FA.getActa() + "','" + FA.getUniversidadGrado() + "',TO_DATE('" + sdf.format(FA.getFechaGrado()) + "','DD/MM/YYYY'),'" + FA.getTarjetaProfesional() + "','" + "" + "')");                            
                            if (Resultado == 0 || Resultado == -1) {
                                MensajeAux = "Error al ingresar en formación académica";
                                Comitar = false;
                                break;
                            }

                        }
                    }
                    if (Comitar) {
                        for (int i = 0; i < bean.getEXS().size(); i++) {
                            Experiencia EX = (Experiencia) (bean.getEXS().get(i));
                            Resultado = sql.getUpdate("INSERT INTO BDADExperiencia (Docente, TipoExperiencia, Empresa, Cargo, TiempoInicio, TiempoFin) VALUES (" + idDocente + ",'" + EX.getTipoExperiencia() + "', '" + EX.getEmpresa() + "', '" + EX.getCargo() + "',TO_DATE('" + sdf.format(EX.getTiempoInicio()) + "','DD/MM/YYYY'), TO_DATE('" + sdf.format(EX.getTiempoFin()) + "','DD/MM/YYYY'))");
                            if (Resultado == 0 || Resultado == -1) {
                                MensajeAux = "Error al ingresar en experiencia";
                                Comitar = false;
                                break;
                            }
                        }
                    }
                    if (Comitar) {
                        for (int i = 0; i < bean.getPS().size(); i++) {
                            Ponencia P = (Ponencia) (bean.getPS().get(i));
                            Resultado = sql.getUpdate("INSERT INTO BDADPonencias (Docente, Isbn, Titulo, TipoEvento, PuntosAsignados, NumeroActa, Fecha, UniversidadParticipante) VALUES (" + idDocente + ",'" + P.getIsbn() + "', '" + P.getTitulo() + "', '" + P.getTipoEvento() + "','" + P.getPuntosAsignados() + "','" + P.getNumeroActa() + "', TO_DATE('" + sdf.format(P.getFecha()) + "','DD/MM/YYYY'),'" + P.getUniversidadParticipante() + "')");
                            if (Resultado == 0 || Resultado == -1) {
                                MensajeAux = "Error al ingresar en ponencias";
                                Comitar = false;
                                break;
                            }
                        }
                    }
                    if (Comitar) {
                        for (int i = 0; i < bean.getLS().size(); i++) {
                            Libro L = (Libro) (bean.getLS().get(i));
                            Resultado = sql.getUpdate("INSERT INTO BDADLibros (Docente, NombreLibro, Autores, PuntosAsignados, NumeroActa, Fecha, UniversidadParticipante, Isbn, AnoPublicacion) VALUES (" + idDocente + ",'" + L.getNombreLibro() + "', '" + L.getAutores() + "', '" + L.getPuntosAsignados() + "','" + L.getNumeroActa() + "',TO_DATE('" + sdf.format(L.getFecha()) + "','DD/MM/YYYY'),'" + L.getUniversidadParticipante() + "','" + L.getIsbn() + "','" + L.getAnoPublicacion() + "')");
                            if (Resultado == 0 || Resultado == -1) {
                                MensajeAux = "Error al ingresar en libros";
                                Comitar = false;
                                break;
                            }
                        }
                    }
                    if (Comitar) {
                        for (int i = 0; i < bean.getAS().size(); i++) {
                            Articulos A = (Articulos) (bean.getAS().get(i));
                            Resultado = sql.getUpdate("INSERT INTO BDADArticulos (Docente, Titulo, Issn, Categoria, Paginas, PuntosAsignados, UniversidadParticipante, NumeroActa, Fecha) VALUES (" + idDocente + ",'" + A.getTitulo() + "', '" + A.getIssn() + "', '" + A.getCategoria() + "','" + A.getPaginas() + "','" + A.getPuntosAsignados() + "','" + A.getUniversidadParticipante() + "','" + A.getNumeroActa() + "',TO_DATE('" + sdf.format(A.getFecha()) + "','DD/MM/YYYY'))");
                            if (Resultado == 0 || Resultado == -1) {
                                MensajeAux = "Error al ingresar en artículos de revista";
                                Comitar = false;
                                break;
                            }
                        }
                    }
                    if (Comitar) {
                        for (int i = 0; i < bean.getCS().size(); i++) {
                            Catedratico C = (Catedratico) (bean.getCS().get(i));
                            Resultado = sql.getUpdate("INSERT INTO BDADCatedraticos (Docente, Escuela, NumeroContrato, PeriodoAcademico, HorasAsignaturas, ValorContrato, Activo) VALUES (" + idDocente + ",'" + C.getEscuela() + "', '" + C.getNumeroContrato() + "', '" + C.getPeriodoAcademico() + "','" + C.getHorasAsignaturas() + "','" + C.getValorContrato() + "','" + C.getActivo() + "')");
                            if (Resultado == 0 || Resultado == -1) {
                                MensajeAux = "Error al ingresar en catedráticos";
                                Comitar = false;
                                break;
                            }
                        }
                    }
                    if (Comitar) {
                        for (int i = 0; i < bean.getOS().size(); i++) {
                            Ocasional O = (Ocasional) (bean.getOS().get(i));
                            Resultado = sql.getUpdate("INSERT INTO BDADOcasionales (Docente, Escuela, ResolucionRectoral, FechaResolucionRectoral, TipoVinculacion, TiempoInicio, TiempoFin, AsignacionMensual, Activo) VALUES(" + idDocente + ",'" + O.getEscuela() + "', '" + O.getResolucionRectoral() + "', TO_DATE('" + sdf.format(O.getFechaResolucionRectoral()) + "','DD/MM/YYYY'),'" + O.getTipoVinculacion() + "',TO_DATE('" + sdf.format(O.getTiempoInicio()) + "','DD/MM/YYYY'), TO_DATE('" + sdf.format(O.getTiempoFin()) + "','DD/MM/YYYY'),'" + O.getAsignacionMensual() + "','" + O.getActivo() + "')");
                            if (Resultado == 0 || Resultado == -1) {
                                MensajeAux = "Error al ingresar en ocasionales";
                                Comitar = false;
                                break;
                            }
                        }
                    }
                    if (Comitar) {
                        for (int i = 0; i < bean.getPLS().size(); i++) {
                            Planta PL = (Planta) (bean.getPLS().get(i));
                            Resultado = sql.getUpdate("INSERT INTO BDADPlanta (Docente, Escuela, ResolucionRectoral, FechaResolucionRectoral, NumeroActaPosesion, FechaActaPosesion, EfectosFiscales, Escalafon, ResolucionEscalafon, FechaResolucionEscalafon, ActaEscalafon, FechaActaEscalafon, AsignacionMensual, Activo) VALUES(" + idDocente + ",'" + PL.getEscuela() + "', '" + PL.getResolucionRectoral() + "', TO_DATE('" + sdf.format(PL.getFechaResolucionRectoral()) + "','DD/MM/YYYY'),'" + PL.getNumeroActaPosesion() + "', TO_DATE('" + sdf.format(PL.getFechaActaPosesion()) +"','DD/MM/YYYY'),TO_DATE('"+ sdf.format(PL.getEfectosFiscales()) + "','DD/MM/YYYY'),'" + PL.getEscalafon() + "','" + PL.getResolucionEscalafon() + "',TO_DATE('" + sdf.format(PL.getFechaActaEscalafon()) + "','DD/MM/YYYY'),'" + PL.getActaEscalafon() + "', TO_DATE('" + sdf.format(PL.getFechaActaEscalafon()) + "','DD/MM/YYYY'),'" + PL.getAsignacionMensual() + "','" + PL.getActivo() + "')");
                            if (Resultado == 0 || Resultado == -1) {
                                MensajeAux = "Error al ingresar en Planta";
                                Comitar = false;
                                break;
                            }
                        }
                    }
                    if (Comitar) {
                        sql.Commit(true);
                        Mensaje = "Docente Ingresado, Exitosamente";
                        FacesContext.getCurrentInstance().getExternalContext().redirect("home.xhtml");
                    }
                    else {
                        sql.Commit(false);
                        if (!MensajeAux.isEmpty()) {
                            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, MensajeAux, MensajeAux));
                        }
                    }
                }
            } catch (Exception e) {
                sql.Commit(false);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se han guardado datos", ""));
                System.out.println("Error: " + e.getMessage());
                Mensaje = e.getMessage();
            }
    return Mensaje;
}
public String action(){
        String retorno = "inicio";
        FacesContext FC = FacesContext.getCurrentInstance();
        beanDatos bean = (beanDatos) FC.getELContext().getELResolver().getValue(FC.getELContext(), null, "beanDatos");
        if (bean.faltandatos()) {
            FC.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Datos Imcompletos", "Datos Imcompletos"));
        } else {
            String mensaje = this.GuardarDatos(bean);
            FC.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, mensaje, mensaje));
        }
        return retorno;
    }
}